package Principal;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Comparator;
import java.util.Random;

import Modelo.Equipo;
import Modelo.Partido;
import Modelo.Umpire;
import Vistas.VMenu;
import Vistas.VUmpire;

public class Liga {
	
	public static ArrayList<Equipo> equipos = new ArrayList<Equipo>();
	public static ArrayList<Partido> calendario = new ArrayList<Partido>();
	public static ArrayList<Umpire> umpires = new ArrayList<Umpire>();
	static Calendar fecha_inicio = Calendar.getInstance();
	static Random aleatorio = new Random();
	static int[][] partidos ;
	
	
	public static void main(String[] args) {
		Liga liga = new Liga();
		liga.iniciar();

	}
	
	void iniciar(){
		VMenu vistaMenu = new VMenu();
		
	}
	
 public	static void generarCalendario(){
		partidos = new int[equipos.size()][equipos.size()];
		
		int numero = 1;
		
		for (int i = 0; i<equipos.size();i++){
			for (int j = 0; j<equipos.size();j++){
				if (i!=j){
				partidos[i][j]=2;	
				}
			}
		}
		
		int indiceVisitante, indiceCasa,indiceAVisitante,indiceACasa;
		int juegos_diarios= equipos.size()/2;
		int actual =0;
		boolean seguir = true;
		indiceAVisitante = 99999;
		indiceACasa = 99999;
		
		
		while (seguir){ // se repetira el proceso mientras no se llegue al maximo de juegos
			indiceAVisitante = 99999;
			indiceACasa = 99999;
			actual =0; // me indicara la cantidad de juegos que se llevan hasta el momento
			          // en el dia
			Calendar fecha_partido = fecha_inicio.getInstance();
			fecha_partido.set(fecha_inicio.get(Calendar.YEAR),fecha_inicio.get(Calendar.MONTH),fecha_inicio.get(Calendar.DATE));
			
			if (fecha_partido.get(fecha_partido.DAY_OF_WEEK)==2){
				//System.out.println("ES LUNES NO SE JUEGA");
				fecha_inicio.add(Calendar.DATE, 1);
				fecha_partido.set(fecha_inicio.get(Calendar.YEAR),fecha_inicio.get(Calendar.MONTH),fecha_inicio.get(Calendar.DATE));
				
			} 
			boolean arbitros[] = new  boolean[umpires.size()] ;
			for (int k=0;k<arbitros.length;k++){
				arbitros[k]=false;
			}
			
			
			boolean arreglo[] = new boolean [equipos.size()];
			while (actual<juegos_diarios){
				
				indiceVisitante = aleatorio.nextInt(equipos.size());
				indiceCasa = aleatorio.nextInt(equipos.size());
				
				if (arreglo[indiceVisitante]!=true && arreglo[indiceCasa]!=true && (indiceVisitante != indiceCasa)){
					
					if (partidos[indiceVisitante][indiceCasa]>0){
						partidos[indiceVisitante][indiceCasa]--;
						actual++;
						int indice = indiceUmpire(arbitros);
						arbitros[indice]=true;
						Partido p = new Partido(Integer.toString(numero), equipos.get(indiceCasa),equipos.get(indiceVisitante),fecha_partido, umpires.get(indice));
						p.Simular();
						calendario.add(p);
						numero++;
						
				}
					
				
			}// fin del if donde comparo los indices
				
				
			
		}// fin del while juegos diarios
			fecha_inicio.add(Calendar.DATE, 1);
			int maximos_juegos = ((equipos.size()-1)*4*equipos.size())/2;
			
			if (numero > maximos_juegos ){
				seguir = false;
			}	
		}// fin del while seguir;

			
	}// fin del metodo generarCalendario
 
 
 public static final Comparator ordenarPosiciones = new Comparator() {

		public int compare(Object o1, Object o2) {
		//comprueba si los objetos que le llegan son del tipo de la clase
		
			if (o1 == o2 || !(o1 instanceof Equipo ) || !(o2 instanceof Equipo )) {
				return 0;
			}
			else {
			Equipo e1 = (Equipo) o1;
			Equipo e2 = (Equipo) o2;
			int jge1 = e1.getJuegosGanados();
			int jge2 = e2.getJuegosGanados();
			// realiza las operaciones de comparaci�n entre los juegos ganados
			return jge1 <= jge2? ((jge1 >= jge2 ? 0: 1)): -1;
			}// fin del if else
		
		} // fin del metodo compare
	}; // fin del objeto ordenarposiciones

	private static int indiceUmpire(boolean [] umpires){
		int indice=0;
		
		for (int i =0;i<umpires.length;i++){
			if (umpires[i]==false)
			return i;	
		}
		
		return indice;
		
	}  
	
}// fin de la clase


/*   Integrantes:
 * Genesis Castro
 * Silvia Abreu
 * Vicmar Fernandez
 * Winder Ojeda 
 * Yaneth Suarez
 * 
 * Seccion 4, Equipo 2  
 * 
 * Dentro de la carpeta que contiene el proyecto esta otra carpeta UML con el digrama de clases
 */
